home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Everything For A Hacker
/
19990506-[HACK].iso
/
HEXEDIT
/
UTILS
/
80X0393.ARJ
/
MYPATH.ASM
< prev
next >
Wrap
Assembly Source File
|
1993-03-30
|
3KB
|
84 lines
;*** MYPATH.ASM - Written by Dave M. Walker @ 1:396/1
;*** Released into the public domain with no reservations.
IDEAL
MODEL TINY
DATASEG
PathBuffer db 128 dup (?)
CODESEG
ORG 0100h
EnvSeg EQU 002Ch
Start: mov bx,OFFSET PathBuffer ;Call our routine
call GetPathName
mov si,bx ;Print the path
call DispString
mov ax,4C00h ;Exit
int 21h
PROC DispString
DispStringLoop: mov dl,[si]
inc si
cmp dl,0
je DispStringExit
mov ah,2
int 21h
jmp DispStringLoop
DispStringExit: ret
ENDP
;***************************************
;* Find pathname at end of environment
;* Entry: DS:BX = Buffer
;* Exit : Pathname copied in the format
;* "D:\PATH\"
;* Regs : None
;* Note : Requires DOS 3 or higher
;***************************************
PROC GetPathName
push ax cx si di ds es ;Save modified regs
mov es,[cs:EnvSeg] ;Point ES:DI to EnvSeg:0000
xor di,di
FindEnvEnd: inc di
cmp [WORD es:di],0 ;Two NULLs means end of env.
jne FindEnvEnd
add di,4 ;Skip NULLs & trail counter
mov si,di ;Save pointer
;*** Find end of pathname (null byte)
mov cx,0FFFFh ;Set CX to a safe limit
cld ;Search forward
repne scasb
sub di,2 ;Backup to end of string
;*** Find last backslash to strip filename.ext
mov al,'\'
std ;Search backward
repne scasb
inc di ;Include last backslash
;*** Copy pathname into buffer
mov cx,di ;Count = (end - start) + 1
sub cx,si
inc cx
mov di,bx
push ds ;Swap ES & DS for block move
push es
pop ds
pop es
cld
rep movsb
xor ax,ax ;Terminate with NULL
stosb
pop es ds di si cx ax ;Recover caller's regs
ret
ENDP
END Start